home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 22
/
Cream of the Crop 22.iso
/
program
/
ctlib100.zip
/
INSTALL.LZH
/
CTARRAYS.INT
< prev
next >
Wrap
Text File
|
1996-10-12
|
14KB
|
380 lines
{**************************************************************************}
{* BitSoft Development, L.L.C. *}
{* Copyright (C) 1995, 1996 BitSoft Development, L.L.C. *}
{* All rights reserved. *}
{* Array objects unit *}
{* Version 1.4.5 *}
{**************************************************************************}
unit ctArrays;
{$X+,B-}
interface
uses Objects,
{$ifdef ver60} BsdVer60, {$endif}
Containr, ctTypes;
type
PDynamicArray = ^TDynamicArray;
TDynamicArray = object(TSequence)
DataSize : Word;
constructor Init(Start, Stop : LongInt; ADataSize : Word);
constructor Load(var S: TStream);
function AtClear(Index : LongInt): Boolean; virtual;
function FreeAll : Boolean; virtual;
function IndexOf(Item : Pointer) : LongInt; virtual;
procedure Store(var S: TStream);
end; { TDynamicArray }
type
PMemArray = ^TMemArray;
TMemArray = object(TDynamicArray)
function AtFree (Index : LongInt) : Boolean; virtual;
function AtReplace(Index : LongInt; Item : Pointer) : Boolean; virtual;
function Free (Item : Pointer) : Boolean; virtual;
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S: TStream) : Pointer; virtual;
procedure PutItem (var S: TStream; Item : Pointer); virtual;
end; { TMemArray }
type
PStdArray = ^TStdArray;
TStdArray = object(TMemArray)
Data : PChar;
constructor Init (Start, Stop : LongInt; ADataSize : Word);
constructor Load (var S: TStream);
destructor Done; virtual;
function At(Index : LongInt): Pointer; virtual;
function AtDelete(Index : LongInt): Boolean; virtual;
function AtInsert(Index : LongInt; Item : Pointer): Boolean; virtual;
function AtPut(Index: LongInt; Item : Pointer) : Boolean; virtual;
function DeleteAll: Boolean; virtual;
procedure Store (var S: TStream);
end; { TStdArray }
type
PResizableStdArray = ^TResizableStdArray;
TResizableStdArray = object(TStdArray)
Limit : Word;
Delta : Word;
constructor Init(ALimit, ADelta, ADataSize : Word);
constructor Load(var S: TStream);
destructor Done; virtual;
function AtDelete(Index : LongInt): Boolean; virtual;
function AtInsert(Index : LongInt; Item : Pointer): Boolean; virtual;
function DeleteAll: Boolean; virtual;
function SetLimit(ALimit : Word): Boolean;
procedure Store(var S: TStream);
end; { TResizableStdArray }
type
PSortedStdArray = ^TSortedStdArray;
TSortedStdArray = object(TResizableStdArray)
Duplicates : Boolean;
CaseSensitive : Boolean;
constructor Init(ALimit, ADelta, ADataSize : Word);
constructor Load (var S: TStream);
function Compare(Key1, Key2 : Pointer): Integer; virtual;
function IndexOf (Item : Pointer) : LongInt; virtual;
function Insert(Item : Pointer) : Boolean; virtual;
function KeyOf (Item : Pointer) : Pointer; virtual;
function Search (Key : Pointer; var Index : LongInt) : Boolean; virtual;
procedure Store (var S: TStream);
end; { TSortedStdArray }
type
PStdObjectArray = ^TStdObjectArray;
TStdObjectArray = object(TStdArray)
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
function IsValidObject(Item : Pointer): Boolean; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
end; { TStdObjectArray }
type
PResizableStdObjectArray = ^TResizableStdObjectArray;
TResizableStdObjectArray = object(TResizableStdArray)
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
function IsValidObject(Item : Pointer): Boolean; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
end; { TResizableStdObjectArray }
type
PSortedStdObjectArray = ^TSortedStdObjectArray;
TSortedStdObjectArray = object(TSortedStdArray)
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
function IsValidObject(Item : Pointer): Boolean; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
end; { TSortedStdObjectArray }
type
PArrayList = ^TArrayList;
TArrayList = array[0..Pred(MaxCollectionSize)] of PChar;
type
PHugeArray = ^THugeArray;
THugeArray = object(TMemArray)
Data : PArrayList;
MaxArraySize : Word;
constructor Init (Start, Stop : LongInt; ADataSize : Word);
constructor Load (var S: TStream);
destructor Done; virtual;
function AllocateArray : Boolean;
function At(Index : LongInt): Pointer; virtual;
function AtDelete(Index : LongInt): Boolean; virtual;
function AtInsert(Index : LongInt; Item : Pointer): Boolean; virtual;
function AtPut(Index: LongInt; Item : Pointer) : Boolean; virtual;
function DeleteAll: Boolean; virtual;
procedure Store (var S: TStream);
end; { THugeArray }
type
PResizableHugeArray = ^TResizableHugeArray;
TResizableHugeArray = object(THugeArray)
Limit : LongInt;
Delta : LongInt;
constructor Init(ALimit, ADelta : LongInt; ADataSize : Word);
constructor Load(var S: TStream);
destructor Done; virtual;
function AtDelete(Index : LongInt): Boolean; virtual;
function AtInsert(Index : LongInt; Item : Pointer): Boolean; virtual;
function DeleteAll: Boolean; virtual;
function SetLimit(ALimit : LongInt): Boolean;
procedure Store(var S: TStream);
end; { TResizableHugeArray }
type
PSortedHugeArray = ^TSortedHugeArray;
TSortedHugeArray = object(TResizableHugeArray)
Duplicates : Boolean;
CaseSensitive : Boolean;
constructor Init(ALimit, ADelta : LongInt; ADataSize : Word);
constructor Load (var S: TStream);
function Compare(Key1, Key2 : Pointer): Integer; virtual;
function IndexOf (Item : Pointer) : LongInt; virtual;
function Insert(Item : Pointer) : Boolean; virtual;
function KeyOf (Item : Pointer) : Pointer; virtual;
function Search (Key : Pointer; var Index : LongInt) : Boolean; virtual;
procedure Store (var S: TStream);
end; { TSortedHugeArray }
type
PHugeObjectArray = ^THugeObjectArray;
THugeObjectArray = object(THugeArray)
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
function IsValidObject(Item : Pointer): Boolean; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
end; { THugeObjectArray }
type
PResizableHugeObjectArray = ^TResizableHugeObjectArray;
TResizableHugeObjectArray = object(TResizableHugeArray)
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
function IsValidObject(Item : Pointer): Boolean; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
end; { TResizableHugeObjectArray }
type
PSortedHugeObjectArray = ^TSortedHugeObjectArray;
TSortedHugeObjectArray = object(TSortedHugeArray)
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
function IsValidObject(Item : Pointer): Boolean; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
end; { TSortedHugeObjectArray }
type
PStreamArray = ^TStreamArray;
TStreamArray = object (TDynamicArray)
Stream : PStream;
constructor Init(Start, Stop : LongInt; ADataSize, AElementSize : Word);
constructor Load(var S: TStream);
destructor Done; virtual;
function AtDelete(Index : LongInt): Boolean; virtual;
function AtInsert(Index : LongInt; Item : Pointer): Boolean; virtual;
function DeleteAll: Boolean; virtual;
procedure DoneItem(Item : Pointer); virtual;
function ForEach (Action : Pointer) : Boolean; virtual;
function ForEachThat (Test, Action : Pointer) : Boolean; virtual;
function InitStream (Size : LongInt) : PStream; virtual;
procedure Reset; virtual;
procedure Store(var S: TStream);
private
ElementSize : Word;
end; { TStreamArray }
type
PStreamStdArray = ^TStreamStdArray;
TStreamStdArray = object(TStreamArray)
constructor Init(Start, Stop : LongInt; ADataSize : Word);
constructor Load(var S: TStream);
function At (Index : LongInt) : Pointer; virtual;
function AtPut (Index : LongInt; Item : Pointer): Boolean; virtual;
procedure FreeItem(Item : Pointer); virtual;
function GetItem(var S: TStream): Pointer; virtual;
procedure PutItem(var S: TStream; Item : Pointer); virtual;
function ReadItem: Pointer; virtual;
procedure Store(var S: TStream);
procedure WriteItem(Item: Pointer); virtual;
end; { TStreamStdArray }
type
PEmsStdArray = ^TEmsStdArray;
TEmsStdArray = object(TStreamStdArray)
function InitStream(Size: LongInt): PStream; virtual;
end; { TEmsStdArray }
type
PStreamStdObjectArray = ^TStreamStdObjectArray;
TStreamStdObjectArray = object(TStreamStdArray)
procedure DoneItem(Item : Pointer); virtual;
procedure FreeItem (Item : Pointer); virtual;
function GetItem (var S : TStream) : Pointer; virtual;
procedure PutItem (var S : TStream; Item : Pointer); virtual;
function ReadItem: Pointer; virtual;
procedure WriteItem(Item: Pointer); virtual;
end; { TStreamStdObjectArray }
type
PEmsStdObjectArray = ^TEmsStdObjectArray;
TEmsStdObjectArray = object(TStreamStdObjectArray)
function InitStream(Size: LongInt): PStream; virtual;
end; { TEmsStdObjectArray }
type
PStreamObjectArray = ^TStreamObjectArray;
TStreamObjectArray = object(TStreamArray)
constructor Init(Start, Stop : LongInt; ADataSize : Word);
constructor Load(var S: TStream);
function At(Index : LongInt) : Pointer; virtual;
function AtPut(Index : LongInt; Item : Pointer): Boolean; virtual;
function FreeAll: Boolean; virtual;
procedure Store(var S: TStream);
end; { TStreamObjectArray }
type
PEmsObjectArray = ^TEmsObjectArray;
TEmsObjectArray = object(TStreamObjectArray)
function InitStream(Size: LongInt): PStream; virtual;
end; { TEmsObjectArray }
procedure RegisterArrays;
const
RStdArray: TStreamRec = (
ObjType: idStdArray;
VmtLink: Ofs(TypeOf(TStdArray)^);
Load: @TStdArray.Load;
Store: @TStdArray.Store);
RResizableStdArray: TStreamRec = (
ObjType: idResizableStdArray;
VmtLink: Ofs(TypeOf(TResizableStdArray)^);
Load: @TResizableStdArray.Load;
Store: @TResizableStdArray.Store);
RSortedStdArray: TStreamRec = (
ObjType: idSortedStdArray;
VmtLink: Ofs(TypeOf(TSortedStdArray)^);
Load: @TSortedStdArray.Load;
Store: @TSortedStdArray.Store);
RStdObjectArray: TStreamRec = (
ObjType: idStdObjectArray;
VmtLink: Ofs(TypeOf(TStdObjectArray)^);
Load: @TStdObjectArray.Load;
Store: @TStdObjectArray.Store);
RResizableStdObjectArray: TStreamRec = (
ObjType: idResizableStdObjectArray;
VmtLink: Ofs(TypeOf(TResizableStdObjectArray)^);
Load: @TResizableStdObjectArray.Load;
Store: @TResizableStdObjectArray.Store);
RSortedStdObjectArray: TStreamRec = (
ObjType: idSortedStdObjectArray;
VmtLink: Ofs(TypeOf(TSortedStdObjectArray)^);
Load: @TSortedStdObjectArray.Load;
Store: @TSortedStdObjectArray.Store);
RHugeArray: TStreamRec = (
ObjType: idHugeArray;
VmtLink: Ofs(TypeOf(THugeArray)^);
Load: @THugeArray.Load;
Store: @THugeArray.Store);
RResizableHugeArray: TStreamRec = (
ObjType: idResizableHugeArray;
VmtLink: Ofs(TypeOf(TResizableHugeArray)^);
Load: @TResizableHugeArray.Load;
Store: @TResizableHugeArray.Store);
RSortedHugeArray: TStreamRec = (
ObjType: idSortedHugeArray;
VmtLink: Ofs(TypeOf(TSortedHugeArray)^);
Load: @TSortedHugeArray.Load;
Store: @TSortedHugeArray.Store);
RHugeObjectArray: TStreamRec = (
ObjType: idHugeObjectArray;
VmtLink: Ofs(TypeOf(THugeObjectArray)^);
Load: @THugeObjectArray.Load;
Store: @THugeObjectArray.Store);
RResizableHugeObjectArray: TStreamRec = (
ObjType: idResizableHugeObjectArray;
VmtLink: Ofs(TypeOf(TResizableHugeObjectArray)^);
Load: @TResizableHugeObjectArray.Load;
Store: @TResizableHugeObjectArray.Store);
RSortedHugeObjectArray: TStreamRec = (
ObjType: idSortedHugeObjectArray;
VmtLink: Ofs(TypeOf(TSortedHugeObjectArray)^);
Load: @TSortedHugeObjectArray.Load;
Store: @TSortedHugeObjectArray.Store);
RStreamStdArray: TStreamRec = (
ObjType: idStreamStdArray;
VmtLink: Ofs(TypeOf(TStreamStdArray)^);
Load: @TStreamStdArray.Load;
Store: @TStreamStdArray.Store);
REmsStdArray: TStreamRec = (
ObjType: idEmsStdArray;
VmtLink: Ofs(TypeOf(TEmsStdArray)^);
Load: @TEmsStdArray.Load;
Store: @TEmsStdArray.Store);
RStreamStdObjectArray: TStreamRec = (
ObjType: idStreamStdObjectArray;
VmtLink: Ofs(TypeOf(TStreamStdObjectArray)^);
Load: @TStreamStdObjectArray.Load;
Store: @TStreamStdObjectArray.Store);
REmsStdObjectArray: TStreamRec = (
ObjType: idEmsStdObjectArray;
VmtLink: Ofs(TypeOf(TEmsStdObjectArray)^);
Load: @TEmsStdObjectArray.Load;
Store: @TEmsStdObjectArray.Store);
RStreamObjectArray: TStreamRec = (
ObjType: idStreamObjectArray;
VmtLink: Ofs(TypeOf(TStreamObjectArray)^);
Load: @TStreamObjectArray.Load;
Store: @TStreamObjectArray.Store);
REmsObjectArray: TStreamRec = (
ObjType: idEmsObjectArray;
VmtLink: Ofs(TypeOf(TEmsObjectArray)^);
Load: @TEmsObjectArray.Load;
Store: @TEmsObjectArray.Store);
implementation
end.